﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

/*
Смоделировать факультет
Иерархия: факультет -> кафедры -> группы -> студенты
Факультет, кафедра, группа - добавить необходимый набор полей

Для факультета, групп, кафедр создать методы ShowInfo (выводит название и какие подструктуры более низкого уровня содержит. К примеру у факультета метод должен вывести название факультета и все кафедры, которые в него входят)

Студент: имя, фамилия, дата рождения, лист оценок

Показать студентов, которые учатся на определенной кафедре
Показать всех студентов группы, у которых средний балл > 50%
Показать всех студентов факультета, у которых средний балл < 20%
*/

namespace Faculty
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] departmentNames = { "Кафедра ничегонеделанья", "Кафедра переливания из пустого в порожнее", "Кафедра философских бесед под коньячок" };
            Faculty myFaculty = GetFaculty("Самый лучший Факультет", departmentNames);
            myFaculty.ShowAllStudentsOfDepartment("Кафедра ничегонеделанья");
            Console.WriteLine(" * * *  * * *  * * *  * * *  * * *  * * * ");
            myFaculty.ShowAllStudentWorseThanCriteium(2);
            Console.WriteLine(" * * *  * * *  * * *  * * *  * * *  * * * ");
            myFaculty.ShowStudentBetterThanCriteium("Группа 4", 5);
            Console.WriteLine(" * * *  * * *  * * *  * * *  * * *  * * * ");
        }

        static Faculty GetFaculty(string facultyName, string[] departmentNames)
        {
            Generator generator = new Generator();
            Faculty newFaculty = new Faculty(facultyName, generator.GenerateName());
            foreach (var departmentName in departmentNames)
            {
                Department newDepartment = new Department(departmentName, generator.GenerateName());
                for (int i = 0; i < 3; i++)
                {
                    Group newGroup = new Group(String.Format("Группа {0}", Group.GetGroupNumber()), generator.GenerateName());
                    for (int j = 0; j < 6; j++)
                    {
                        newGroup.Add(generator.GenerateStudent());
                    }
                    newDepartment.AddGroup(newGroup);
                }
                newFaculty.AddDepartment(newDepartment);
            }
            return newFaculty;
        }

    }
}
